package 程序员面试金典;

/**
 * 面试题 01.03. URL化
 * URL化。编写一种方法，将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符，并且知道字符串的“真实”长度。（注：用Java实现的话，请使用字符数组实现，以便直接在数组上操作。）
 *
 *
 *
 * 示例 1：
 *
 * 输入："Mr John Smith    ", 13
 * 输出："Mr%20John%20Smith"
 * 示例 2：
 *
 * 输入："               ", 5
 * 输出："%20%20%20%20%20"
 *
 *
 * 提示：
 *
 * 字符串长度在 [0, 500000] 范围内。
 */
public class T01_03 {
    /**
     * 使用StringBuilder 遍历字符串 遇到空格拼接 %20 其他字符正常拼接
     */
    public static String replaceSpaces(String S, int length) {

//        StringBuilder builder = new StringBuilder();
//        for (int i = 0; i < length; i++) {
//            char c = S.charAt(i);
//            if (c==' '){
//                builder.append("%20");
//            }else {
//                builder.append(c);
//            }
//        }
//
//        return builder.toString();

        //方法二
        char[] chars = S.toCharArray();

        int validBlankSpace = 0;

        int finalLength = 0;

        for (int i = 0; i < length; i++) {
            if (chars[i] == ' ') {
                validBlankSpace++;
            }
        }

        if (validBlankSpace == 0) {
            return S.substring(0, length);
        }

        finalLength = length + 2 * validBlankSpace;

        char[] ans = new char[finalLength];


        for (int i = 0, j = 0; i < length; i++) {

            if (chars[i] == ' ') {
                ans[j++] = '%';
                ans[j++] = '2';
                ans[j++] = '0';
            } else {
                ans[j++] = chars[i];
            }

        }

        return new String(ans);

    }

}
